.. _cmmCfgSetUnitSpeed: cmmCfgSetUnitSpeed ===================== --------------------- SYNOPSYS ````````````` .. code-block:: none VT_I4 cmmCfgSetUnitSpeed( [in] VT_I4 Axis, [in] VT_R8 UnitSpeed ) DESCRIPTION ``````````````` 논리적 단위 속도에 대한 실제 펄스 출력속도(PPS)를 설정합니다. PARAMETER ``````````` - Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다. \ - UnitSpeed : cmmCfgSetUnitSpeed 함수의 인자이며, 단위 속도에 대한 펄스 출력 속도(PPS)를 설정합니다. REFERENCE ``````````` - 사용자의 특성에 따라 속도에 대한 단위가 다를 수 있습니다. 즉, 어떤 사용자는 속도 단위를 RPM 으로 표현하는 것이 용이할 수 있고 어떤 사용자는 m/sec 로 표현하는 것이 용이할 수 있습니다. EXAMPLE 1 .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ 1 회전에 필요한 펄스수가 3600 펄스일 때 거리의 단위를 각도(1˚)로, 속도의 단위를 rpm 으로 설정하는 예제입니다. #include “Cmmsdk.h” #include “CmmsdkDef.h” void StartProgram() { long nNumAxes = 0; if ( cmmLoadDll() != TRUE ) { /* OutputDebugString API 는 GUI 프로그램에서 문자열을 디버거에 보낼 수 있습니다. Borland C++ Builder 에서는 DebugWindows 에 Event Log 를 확인할 수 있으며, MS VC++ 에서는 Debug 윈도우에서 확인할 수 있습니다. */ OutputDebugString(“DLL 로드에 실패하였습니다”); // 이후 적절한 에러처리를 해주시기 바랍니다. } if ( cmmGnDeviceLoad(cmTRUE, &nNumAxes) != cmERR_NONE ){ // MS VC++ 에서는 아래와 같이 에러 원인을 화면에 표시할 수 있습니다. cmmErrShowLast(Handle); //사용자 작성 윈도우의 핸들값입니다. // Borland C++ 계열에서는 아래와 같이 에러 원인을 화면에 표시할 수 // 있습니다. //cmmErrShowLast(Form1->Handle); } } // 실제 이동 동작을 수행하는 가상 함수입니다. void OnMove(void) { // Set 10 pulses for unit distance // 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로 // 가정하고 단위 거리를 1˚로 설정한 것입니다. cmmCfgSetUnitDist(cmX1, 10); // Set 3600/60(=60) PPS for unit speed // 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로 // 가정하고 단위 속도를 1rpm 으로 설정한 것입니다. cmmCfgSetUnitSpeed(cmX1, 3600./60); // Set trapezoidal speed mode // // Set speed as 100 rpm // //가속도와 감속도를 각각 200rpm/s 로 설정합니다. 이렇게 하면 작업속도가 100rpm 이므로 가속 및 감속 시간은 각각 0.5 초가 걸립니다. cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 100,200,200); // 모터를 720˚회전한다. 실제로는 720*10 펄스가 출력됩니다. // cmmSxMove(cmX1, 720,cmFALSE); } void EndProgram(void) { cmmGnDeviceUnload(); cmmUnloadDll(); } .. code-block:: none :linenos: Visual Basic '1 회전에 필요한 펄스수가 3600 펄스일 때 거리의 단위를 각도(1˚)로, '속도의 단위를 rpm 으로 설정하는 예제입니다. Private Sub StartProgram() Dim nTotalAxis As Long Dim IRetVal As Long Dim IsLoaded As Long '================================================================== ' cmmGnDeviceLoad 함수를 장치를 초기화합니다. IRetVal = cmmGnDeviceLoad(True, nTotalAxis) If IRetVal <> cmERR_NONE Then MsgBox ("cmmGnDeviceLoad has been failed") End If '================================================================== '================================================================== ' cmmGnDeviceIsLoaded 함수로 장치가 올바르게 불려졌는지를 확인할 수 있습니다. Call cmmGnDeviceIsLoaded(IsLoaded) If IsLoaded <> cmTRUE Then MsgBox ("디바이스 로드를 실패하였습니다") End End If '================================================================== End Sub '// 실제 이동 동작을 수행하는 가상 함수입니다. Private Sub OnMove(void) '// Set 10 pulses for unit distance '// 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로 '// 가정하고 단위 거리를 1˚로 설정한 것입니다. Call cmmCfgSetUnitDist(cmX1, 10) '// Set 3600/60(=60) PPS for unit speed '// 이 예제에서는 1 회전에 필요한 펄스 수를 3600 펄스로 '// 가정하고 단위 속도를 1rpm 으로 설정한 것입니다. Call cmmCfgSetUnitSpeed(cmX1, 3600# / 60) '// Set trapezoidal speed mode '// Set speed as 100 rpm '//가속도와 감속도를 각각 200rpm/s 로 설정합니다. 이렇게 하면 작업속도가 ‘//100rpm 이므로 가속 및 감속 시간은 각각 0.5 초 걸립니다. Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 100, 200, 200) '// 모터를 720˚회전한다. 실제로는 720*10 펄스가 출력됩니다. Call cmmSxMove(cmX1, 720, cmFALSE) End Sub Private Sub EndProgram() Call cmmGnDeviceUnload Call cmmUnloadDll End Sub .. code-block:: none :linenos: Delphi procedure OnSetUnitSpeed (); begin { 1 회전에 필요한 펄스수가 3600 펄스일 때 거리의 단위를 각도 (1˚)로, 속도의 단위를 RPM 으로 설정합니다. } // 1 회전에 3600 펄스가 필요하므로 1˚ 회전을 하기 위해서는 10 펄스가 필요합니다. cmmCfgSetUnitDist (cmX1, 10 ); // 단위 속도를 1rpm 으로 설정합니다. 3600(pulse) / 60(sec) = 60(pps) cmmCfgSetUnitSpeed (cmX1, 60 ); end; procedure OnMove (); begin { 가속도와 감속도를 각각 200rpm/s 로 설정합니다. 이렇게 하면 작업 속도가 100rpm 이므로 가속 및 감속에는 0.5sec 가 소요됩니다. } cmmCfgSetSpeedPattern (cmX1, cmSMODE_T, 100, 200, 200 ); // 모터를 720˚ 회전 시킵니다. 실제로는 720 * 10 pulse 가 출력됩니다. cmmSxMoveStart (cmX1, 720 ); end; EXAMPLE 2 .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ 1cm 이동하는데 필요한 펄스수가 1000 펄스일 때 거리의 단위를 cm 로, 속도의 단위를 cm/sec 로 설정하는 예제입니다. #include “Cmmsdk.h” #include “CmmsdkDef.h” void StartProgram() { long nNumAxes = 0; if ( cmmLoadDll() != TRUE ) { * OutputDebugString API 는 GUI 프로그램에서 문자열을 디버거에 보낼 수 있습니다. Borland C++ Builder 에서는 DebugWindows 에 Event Log 를 확인할 수 있으며, MS VC++ 에서는 Debug 윈도우에서 확인할 수 있습니다. */ OutputDebugString(“DLL 로드에 실패하였습니다”); // 이후 적절한 에러처리를 해주시기 바랍니다. } if ( cmmGnDeviceLoad(cmTRUE, &nNumAxes) != cmERR_NONE ){ // MS VC++ 에서는 아래와 같이 에러 원인을 화면에 표시할 수 있습니다. cmmErrShowLast(Handle); //사용자가 제작 윈도우의 핸들입니다. // Borland C++ 계열에서는 아래와 같이 에러 원인을 화면에 표시할 수 // 있습니다. // cmmErrShowLast(Form1->Handle); } } /* void StartProgram() */ // 실제 이동 동작을 수행하는 가상 함수입니다. void OnMove(void) { // Set 1000 pulses for unit distance // 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로 // 가정하고 단위 거리를 1cm 로 설정한 것입니다. cmmCfgSetUnitDist(cmX1, 1000); // Set 1000 PPS for unit speed // 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로 // 펄스로 가정하고 단위 속도를 1rpm 로 설정한 것입니다. cmmCfgSetUnitSpeed(cmX1, 1000); // Set speed as 50 cm/sec/ // Set constant speed mode cmmCfgSetSpeedPattern(cmX1, cmSMODE_C, 50,0,0); cmmSxMove(cmX1, 10); // 50 cm/sec 의 속도로 10cm 이동 . 실제로는 10*1000=10000 펄스가 출력됩니다. } void EndProgram(void) { cmmGnDeviceUnload(); cmmUnloadDll(); } .. code-block:: none :linenos: Visual Basic '1cm 이동하는데 필요한 펄스수가 1000 펄스일 때 거리의 단위를 cm 로, '속도의 단위를 cm/sec 로 설정하는 예제입니다. Private Sub StartProgram() Dim nTotalAxis As Long Dim IRetVal As Long Dim IsLoaded As Long '================================================================== ' cmmGnDeviceLoad 함수를 장치를 초기화합니다. IRetVal = cmmGnDeviceLoad(True, nTotalAxis) If IRetVal <> cmERR_NONE Then MsgBox ("cmmGnDeviceLoad has been failed") End If '================================================================== '================================================================== ' cmmGnDeviceIsLoaded 함수로 장치가 올바르게 불려졌는지를 확인할 수 있습니다. Call cmmGnDeviceIsLoaded(IsLoaded) If IsLoaded <> cmTRUE Then MsgBox ("디바이스 로드를 실패하였습니다") End End If '================================================================== End Sub '// 실제 이동 동작을 수행하는 가상 함수입니다. Private Sub OnMove() '// Set 1000 pulses for unit distance '// 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로 '// 가정하고 단위 거리를 1cm 로 설정한 것입니다. Call cmmCfgSetUnitDist(cmX1, 1000) '// Set 1000 PPS for unit speed '// 이 예제에서는 1cm 이동에 필요한 펄스 수를 1000 펄스로 '// 펄스로 가정하고 단위 속도를 1rpm 로 설정한 것입니다. Call cmmCfgSetUnitSpeed(cmX1, 1000) '// Set speed as 50 cm/sec/ // '// Set constant speed mode // Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_C, 50, 0, 0) Call cmmSxMove(cmX1, 10) '50 cm/sec 의 속도로 10cm 이동 '실제로는 10*1000=10000 펄스가 출력됩니다. End Sub Private Sub EndProgram() Call cmmGnDeviceUnload Call cmmUnloadDll End Sub .. seealso:: :ref:`cmmCfgSetUnitSpeed`